package com.liu.juc;


import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 *
 * y用于解决多线程安全性问题的方式：
 * syschronized ：隐式锁
 * 1、同步代码块
 * 2、同步方法
 * 3 、同步锁lock
 *  注意：是一个显示的锁、需要通过lock（）方法上锁，必须通过unlock（）方法进行释放锁；
 */
public class TestLock {



    public static void main(String[] args) {
        Ticket ticket = new Ticket();

        new Thread(ticket,"窗口1").start();
        new Thread(ticket,"窗口2").start();
        new Thread(ticket,"窗口3").start();
        new Thread(ticket,"窗口4").start();


    }

}
class Ticket implements Runnable{

    private int  tick=100;

    Lock lock = new ReentrantLock();

    @Override
    public void run() {

          lock.lock(); // 上锁
        try {
            while (tick>0){
                System.out.println(Thread.currentThread().getName()+ "完成售票，余票为："+ --tick);
            }
        }finally {
            lock.unlock(); // 解锁。释放锁

        }


    }
}